﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;

using System.Data.SqlClient;
using MySql.Data.MySqlClient;

namespace JA.Negocios
{
    public static partial class ModelBO
    {

        public static CidadeVO getCidade(int idCidade, string cidade)
        {
            CidadeVO cidadeVO = null;
            List<CidadeVO> listCidadeVOs = getCidades(idCidade, cidade, null);
            if (listCidadeVOs != null && listCidadeVOs.Count > 0)
            {
                cidadeVO = listCidadeVOs[0];
            }
            return cidadeVO;
        }

        public static List<CidadeVO> getCidades()
        {
            return getCidades(null,null,null);
        }

        public static List<CidadeVO> getCidades(int? idCidade, string cidade, string siglaUf)
        {
            string where = "AND ";
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT IdCidade, Cidade, uf.Sigla, uf.Estado, cidade.Cadastro, cidade.CadastradoPor, cidade.Edicao, cidade.EditadoPor ");
            query.AppendLine("FROM cidade, uf ");
            query.AppendLine("WHERE cidade.sigla = uf.sigla ");
            if (idCidade != null)
            {
                query.AppendLine(where + "IdCidade=?IdCidade ");
                where = "AND ";
            }
            if (cidade != null)
            {
                query.AppendLine(where + "Cidade LIKE ?Cidade ");
                where = "AND ";
            }
            if (siglaUf != null)
            {
                query.AppendLine(where + "uf.Sigla=?Sigla ");
                where = "AND ";
            }

            query.AppendLine("ORDER BY Cidade ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (idCidade != null) cmd.Parameters.AddWithValue("?IdCidade", idCidade);
            if (cidade != null) cmd.Parameters.AddWithValue("?Cidade", "%" + cidade + "%");
            if (siglaUf != null) cmd.Parameters.AddWithValue("?Sigla", siglaUf);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<CidadeVO> listCidade = new List<CidadeVO>();

                while (reader.Read())
                {
                    CidadeVO cidadeVO = CidadeVO.CreateCidadeVO();
                    cidadeVO.idCidade = reader.GetInt32(reader.GetOrdinal("IdCidade"));
                    cidadeVO.cidade = reader.GetString(reader.GetOrdinal("Cidade"));
                    cidadeVO.uf.siglaUf = reader.GetString(reader.GetOrdinal("Sigla"));
                    cidadeVO.uf.uf = reader.GetString(reader.GetOrdinal("Estado"));
                    cidadeVO.cadastro = reader.GetDateTime(reader.GetOrdinal("Cadastro"));
                    cidadeVO.cadastradoPor = reader.GetString(reader.GetOrdinal("CadastradoPor"));
                    cidadeVO.edicao = reader.GetDateTime(reader.GetOrdinal("Edicao"));
                    cidadeVO.editadoPor = reader.GetString(reader.GetOrdinal("EditadoPor"));
                    listCidade.Add(cidadeVO);
                }
                reader.Close();
                return listCidade;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setCidade(CidadeVO cidadeVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE cidade ");
            query.AppendLine("SET Cidade=?Cidade, Sigla=?Sigla, Cadastro=?Cadastro, CadastradoPor=?CadastradoPor, Edicao=?Edicao, EditadoPor=?EditadoPor ");
            query.AppendLine("WHERE IdCidade=?IdCidade ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdCidade", cidadeVO.idCidade);
            cmd.Parameters.AddWithValue("?Cidade", cidadeVO.cidade);
            cmd.Parameters.AddWithValue("?Sigla", cidadeVO.uf.siglaUf);
            cmd.Parameters.AddWithValue("?Cadastro", cidadeVO.cadastro);
            cmd.Parameters.AddWithValue("?CadastradoPor", cidadeVO.cadastradoPor);
            cmd.Parameters.AddWithValue("?Edicao", cidadeVO.edicao);
            cmd.Parameters.AddWithValue("?EditadoPor", cidadeVO.editadoPor);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static long newCidade(CidadeVO cidadeVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO cidade ");
            query.AppendLine("  ( Cidade, Sigla, Cadastro, CadastradoPor, Edicao, EditadoPor ) ");
            query.AppendLine("VALUES (?Cidade, ?Sigla, ?Cadastro, ?CadastradoPor, ?Edicao, ?EditadoPor ) ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?Cidade", cidadeVO.cidade);
            cmd.Parameters.AddWithValue("?Sigla", cidadeVO.uf.siglaUf);
            cmd.Parameters.AddWithValue("?Cadastro", cidadeVO.cadastro);
            cmd.Parameters.AddWithValue("?CadastradoPor", cidadeVO.cadastradoPor);
            cmd.Parameters.AddWithValue("?Edicao", cidadeVO.edicao);
            cmd.Parameters.AddWithValue("?EditadoPor", cidadeVO.editadoPor);

            try
            {
                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delCidade(CidadeVO cidadeVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM cidade ");
            query.AppendLine("WHERE IdCidade=?IdCidade ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdCidade", cidadeVO.idCidade);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
    }
}
